package org.soderiakelvy.model.dao.imp;

import java.io.Serializable;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.soderiakelvy.model.dao.TipoProductoDao;
import org.soderiakelvy.model.domain.TipoProductoVO;
import org.soderiakelvy.model.util.HibernateUtil;


public class TipoProductoDaoImp implements TipoProductoDao, Serializable{
	private static final long serialVersionUID = -5749336104780678934L;

	@Override
	public void insertTipoProductoVO(TipoProductoVO tp) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.save(tp);
        session.getTransaction().commit();
        session.close();
	}

	@Override
	public void updateTipoProductoVO(TipoProductoVO tp) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
      	Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.update(tp);
        session.getTransaction().commit();
        session.close();
		
	}

	@Override
	public void deleteTipoProductoVO(TipoProductoVO tp) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.delete(tp);
        session.getTransaction().commit();
        session.close();
		
	}

	@Override
	public List<TipoProductoVO> getAllTipoDeProductoVO() throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        Criteria criteria = session.createCriteria(TipoProductoVO.class);
        criteria.addOrder(Order.asc("nombre"));
        List<TipoProductoVO> tiposDeProductos = criteria.list();
        session.close();
        return tiposDeProductos;
	}

	@Override
	public TipoProductoVO getTipoProductobyId(long id) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        Criteria criteria = session.createCriteria(TipoProductoVO.class);
        criteria.add(Restrictions.eq("tipoProductoId", id));
        TipoProductoVO tipoProductoVO = (TipoProductoVO)criteria.uniqueResult();
        session.close();
        return tipoProductoVO;
	}

	@Override
	public TipoProductoVO getTipoProductoByNombre(String nombre){
		try {
			SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
	        Session session = sessionFactory.openSession();
	        Criteria criteria = session.createCriteria(TipoProductoVO.class);
	        criteria.add(Restrictions.eq("nombre", nombre));
	        TipoProductoVO tipoProductoVO = (TipoProductoVO)criteria.uniqueResult();
	        session.close();
	        return tipoProductoVO;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		
	}	
	
}
